package ru.pb.game.network.engine.client.packets.receivable;

import ru.pb.game.network.engine.client.packets.FromClientToGameServerPacket;
import ru.pb.game.network.engine.client.packets.sendable.opcode_3592_ACK;
import ru.pb.game.objects.model.players.Player;
import ru.pb.game.objects.model.room.Room;
import ru.pb.game.objects.storage.ObjectsStorage;

/**
 * @author Felixx
 *         Чтение настроек разрешенного оружия.
 */
public class opcode_3591_REQ extends FromClientToGameServerPacket
{
	private Room _room;
	private Player _player;
	private int _unk1, _unk2, _unk4, _roomId, test1, test2;
	private String _player_name;
	private int unkc3, unkc4, unkc5, unkc6;

	public opcode_3591_REQ()
	{}

	@Override
	public void readImpl()
	{
		// _log.info("buf size: " + _buf.remaining());
		// _log.info(NetworkUtil.printData(_buf));
		Room _room = getPlayer().getRoom();
		_roomId = readD(); // Номер комнаты, всегда 0. мы используемразмер всех комнат на канале.

		_room.name = readS(Room.NET_ROOM_NAME_SIZE); // Имя комнаты
		// _room.unkc1 = readC(); // Хз тут МЕНЯЕТСЯ КАЖДУЮ СЕССИЮ
		// _room.unkc2 = readC(); // Хз тут МЕНЯЕТСЯ КАЖДУЮ СЕССИЮ
		// _unk1 = readC(); // Хз тут МЕНЯЕТСЯ КАЖДУЮ СЕССИЮ

		_room.map_id = readC(); // ИД карты
		_unk2 = readC(); // Хз тут 0
		_room.stage4v4 = readC(); // Карта 4 на 4

		_room.room_type = readC(); // Тип карты
		test1 = readC(); // Хз тут 0
		test2 = readC(); // Хз тут 0
		_room.initSlotCount(readC()); // Сколько разрешено слотов

		_unk4 = readC(); // Хз тут 0
		_room.allweapons = readC(); // Разрешонное оружие
		_room.random_map = readC(); // Карта рандомная = 2
		_room.special = readC(); // Номер спец миссии
		_player_name = readS(Player.NET_NICK_NAME_SIZE); // Имя игрока если повторно
		_room.killtime = readC(); // Сколько убийств или времени нужно
		unkc3 = readC(); // хз тут 0
		unkc4 = readC(); // хз тут 0
		unkc5 = readC(); // хз тут 0
		_room.limit = readC(); // Лимит на вход
		_room.seeConf = readC(); // Настройка просмотра
		_room.autobalans = readH(); // Автоболанс
		_room.password = readS(4); // Пароль комнаты

		_player = getPlayer();
		_room.setLeader(_player.getObjectId());
		_room.addPlayer(_player);

		/*
		 * _log.info("MapName: " + _room.name);
		 * _log.info("unkc1: " + _room.unkc1);
		 * _log.info("unkc2: " + _room.unkc2);
		 * _log.info("unk1: " + _unk1);
		 * _log.info("mapId: " + _room.map_id);
		 * _log.info("unk2: " + _unk2);
		 * _log.info("stage4v4: " + _room.stage4v4);
		 * _log.info("room_type: " + _room.room_type);
		 * _log.info("test1: " + test1); // _stageSlot = readC();
		 * _log.info("test2: " + test2); // _stageOrd = readC();
		 * _log.info("slotcount: " + _room.getSlotCount());
		 * _log.info("unk4: " + _unk4);
		 * _log.info("Allow weapons: " + _room.allweapons);
		 * _log.info("Random map: " + _room.random_map);
		 * _log.info("room_special: " + _room.special);
		 * _log.info("Player name: " + _player_name);
		 * _log.info("killTime: " + _room.killtime);
		 * _log.info("unkc1: " + unkc3);
		 * _log.info("unkc1: " + unkc4);
		 * _log.info("unkc1: " + unkc5);
		 * _log.info("limit: " + _room.limit);
		 * _log.info("seeConf: " + _room.seeConf);
		 * _log.info("autobalans: " + _room.autobalans);
		 * _log.info("unkc1: " + unkc6);
		 * _log.info("PASS: " + _room.password);
		 */

		if(_buf.remaining() > 0)
		{
			_room._aiCount = readC(); // Количество ботов
			_room._aiLevel = readC(); // Уровень ботов
			// _log.info("aiCount: " + _room._aiCount);
			// _log.info("aiLevel: " + _room._aiLevel);
		}
		// _log.info("buf remaining: " + _buf.remaining());

		// _log.info("buf size: " + _buf.remaining());
	}

	@Override
	public void runImpl()
	{
		Player p = getPlayer();
		if(p != null)
		{
			Room r = p.getRoom();
			if(r != null)
			{
				Player member = null;
				for(int objId : p.getRoom().getAllPlayers().toArray())
				{
					member = ObjectsStorage.getInstance().getPlayer(objId);
					member.sendPacket(new opcode_3592_ACK(r));
				}
			}
		}
	}
}